/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package dao;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.List;
import modelo.*;
import util.ControlaConexao;

/**
 *
 * @author Professor
 */
public class UsuarioDAO {

    private Connection conexao;
    private PreparedStatement instrucao;
    private ResultSet resultados;

    //inserir
    public void inserir(Usuario usuario) {
        try {
            this.conexao = new ControlaConexao().getConexao();

            System.out.println("conectado com sucesso");

            String sql = "CALL INSERIR_USUARIO(?,?,?,?,?)";
            instrucao = conexao.prepareStatement(sql);
            System.out.println("instrução iniciada");
            this.instrucao.setLong(1, usuario.getSetorId());
            this.instrucao.setString(2, usuario.getCpf());
            this.instrucao.setString(3, usuario.getNome());
            this.instrucao.setString(4, usuario.getTelefone());
            this.instrucao.setString(5, usuario.getEmail());
            instrucao.execute();
            
        } catch (Exception e) {
            System.out.println("Erro de banco de Dados: " + e.getMessage());
        } finally {
            ControlaConexao.fecharInstrucao(instrucao);
            System.out.println("instrucao terminada");
            ControlaConexao.fecharConexao(conexao);
            System.out.println("conexao terminada");
        }

    }
    //alterar

    public void alterar(Usuario usuario) {

        try {

            conexao = new ControlaConexao().getConexao();
            String sql = "CALL ALTERAR_USUARIO(?,?,?,?,?,?)";
            instrucao = conexao.prepareStatement(sql);

            instrucao.setLong(1, usuario.getId());
            instrucao.setLong(2, usuario.getSetorId());
            instrucao.setString(3, usuario.getCpf());
            instrucao.setString(4, usuario.getNome());
            instrucao.setString(5, usuario.getTelefone());
            instrucao.setString(6, usuario.getEmail());
            instrucao.execute();

            System.out.println("Alterado com sucesso!");

            instrucao.close();

            conexao.close();

        } catch (Exception e) {

            System.out.println("Erro de Banco de Dados: " + e.getMessage());
        } finally {
            ControlaConexao.fecharInstrucao(instrucao);
            ControlaConexao.fecharConexao(conexao);
        }

    }
    //excluir
    public void excluir(Usuario usuario) {

        try {

            conexao = new ControlaConexao().getConexao();

            String sql = "Call EXCLUIR_USUARIO(?)";
            instrucao = conexao.prepareStatement(sql);

            instrucao.setLong(1, usuario.getId());

            instrucao.execute();

            System.out.println("exclusão realizada com sucesso!");

        } catch (Exception e) {

            System.out.println("Erro de Banco de Dados: " + e.getMessage());

        } finally {
            ControlaConexao.fecharInstrucao(instrucao);
            ControlaConexao.fecharConexao(conexao);
        }

    }
    //consultar
     public Usuario consultar(Usuario usuario) {


        try {

            this.conexao = new ControlaConexao().getConexao();

            String sql = "CALL CONSULTAR_USUARIO(?)";

            instrucao = conexao.prepareStatement(sql);

            instrucao.setLong(1, usuario.getId());

            instrucao.executeUpdate();

            resultados = instrucao.getResultSet();

            while (resultados.next()) {
                usuario.setId(Long.parseLong(resultados.getString("usu_id")));               
                usuario.setNome(resultados.getString("usu_nome"));                
            }

        } catch (Exception e) {

            System.out.println("Erro de Banco de Dados: " + e.getMessage());
        } finally {
            ControlaConexao.fecharResultados(resultados);
            ControlaConexao.fecharInstrucao(instrucao);
            ControlaConexao.fecharConexao(conexao);
        }

        return usuario;

    }

    //pesquisar
     public List<Usuario> pesquisar(Usuario usuario) {

        List<Usuario> usuarios = new ArrayList<Usuario>();

        try {

            conexao = new ControlaConexao().getConexao();

            String sql = "Call PESQUISAR_USUARIO(?)";

            instrucao = conexao.prepareStatement(sql);

            instrucao.setString(1, usuario.getNome());
            

            instrucao.executeUpdate();

            System.out.println("Pesquisa completa");
            resultados = instrucao.getResultSet();

            while (resultados.next()) {

                Usuario usuarioEncontrado = new Usuario();

                usuarioEncontrado.setId(Long.parseLong(resultados.getString("usu_id")));
                usuarioEncontrado.setNome(resultados.getString("usu_nome"));
                usuarioEncontrado.setCpf(resultados.getString("usu_cpf"));
                usuarioEncontrado.setTelefone(resultados.getString("usu_telefone"));
                usuarioEncontrado.setEmail(resultados.getString("usu_email"));
                usuarioEncontrado.setSetorId(resultados.getLong("usu_set_id"));

            }

        } catch (Exception e) {

            System.out.println("Erro de Banco de Dados: " + e.getMessage());
        } finally {
            ControlaConexao.fecharResultados(resultados);
            ControlaConexao.fecharInstrucao(instrucao);
            ControlaConexao.fecharConexao(conexao);
        }
        return usuarios;
    }
}
